iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
自我挑戰組

用數據守護雙眼:生活型態對視力影響的探索性資料分析系列 第 9 篇

量化關聯性!全特徵皮爾森相關係數矩陣與熱力圖實作

  • 分享至 

  • xImage
  •  

利用Pandas計算資料集中所有數值特徵的皮爾森相關係數,並使用Seaborn繪製帶有數值標籤的相關係數熱力圖,系統性排查多變數間的關聯強度。

一、實作前情境:告別視覺猜測,用數字量化關聯
昨天在Day 8繪製每日螢幕使用時數與眼部症狀的散佈圖時,意外發現迴歸趨勢線幾乎呈現水平狀態。
這引出了一個關鍵的統計疑問:

  • 螢幕使用時數與乾澀、眼痛的相關係數r到底是多少(接近0.05還是負值)?
  • 在所有數值特徵中(年齡、螢幕時數、休息次數、睡眠時數、頭痛頻率、乾澀、眼痛),是否存在其他彼此呈現高度正相關或負相關的特徵組合?
    為了避免逐一繪製兩兩變數的散佈圖,今天直接計算皮爾森相關係數矩陣(Correlation Matrix),並透過熱力圖的色彩漸層一次掌握整體相關性格局。

二、撰寫相關係數矩陣與熱力圖腳本
在Colab中新增儲存格,撰寫計算與繪製熱力圖的腳本:

# ==========================================
# Day 9:數值特徵皮爾森相關係數熱力圖
# ==========================================

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.font_manager as fm
import numpy as np

# 確保引用中文字型
font_path = 'NotoSansTC-Regular.otf'
my_font = fm.FontProperties(fname=font_path)

# 1. 篩選數值型欄位並計算皮爾森相關係數
numeric_df = df.select_dtypes(include=['float64', 'int64'])
corr_matrix = numeric_df.corr(method='pearson')

# 2. 建立半三角遮罩(避免上下對稱重複顯示,讓圖表更簡潔)
mask = np.triu(np.ones_like(corr_matrix, dtype=bool))

# 3. 繪製熱力圖
plt.figure(figsize=(10, 8))
sns.set_theme(style="white")

# 定義欄位中文映射字典,方便座標軸對照閱讀
labels_map = {
    'Age': '年齡',
    'Daily_Screen_Hours': '每日螢幕時數',
    'Break_Frequency_Per_Hour': '每小時休息次數',
    'Eye_Dryness_Level': '眼睛乾澀程度',
    'Eye_Pain_Level': '眼痛程度',
    'Headache_Frequency_Per_Week': '每週頭痛頻率',
    'Sleep_Hours': '每日睡眠時數'
}
tick_labels = [labels_map.get(col, col) for col in corr_matrix.columns]

ax = sns.heatmap(
    corr_matrix, 
    mask=mask,
    annot=True, 
    fmt=".2f", 
    cmap='coolwarm', 
    vmin=-1, 
    vmax=1, 
    linewidths=0.5,
    cbar_kws={"shrink": .8}
)

# 4. 套用字型至座標軸與標題
ax.set_xticklabels(tick_labels, fontproperties=my_font, rotation=45, ha='right', fontsize=11)
ax.set_yticklabels(tick_labels, fontproperties=my_font, rotation=0, fontsize=11)
plt.title('數位用眼健康數值特徵相關係數熱力圖', fontproperties=my_font, fontsize=15, fontweight='bold', pad=15)

plt.tight_layout()
plt.show()

# 5. 印出數值矩陣表格作為對照
print("=== 數值相關係數矩陣 ===")
corr_matrix.round(3)

https://ithelp.ithome.com.tw/upload/images/20260923/20178794QIJnuqldCQ.png
https://ithelp.ithome.com.tw/upload/images/20260923/20178794smQ97zG8r1.png

三、圖表解讀與統計觀察(真實矩陣數據剖析)
觀察相關係數矩陣與熱力圖的量化數值,可以歸納出三大關鍵發現:
1.核心假說量化驗證:螢幕暴露時數與眼部症狀近乎「線性獨立」

  • Daily_Screen_Hours(每日螢幕時數)與 Eye_Dryness_Level(乾澀程度)的相關係數僅為r = 0.012(圖表標示 0.01)。
  • Daily_Screen_Hours 與 Eye_Pain_Level(眼痛程度)的相關係數更低至r = 0.001(圖表標示0.00)。
  • 統計結論:這以精確數字解釋了Day 8散佈圖中迴歸線呈水平狀態的成因——在整體樣本中,單一螢幕時長的線性增減,並不會直接等比例引發自評乾澀或眼痛分數的線性上升。
    2.全矩陣最高相關點:眼痛與頭痛頻率的共伴效應
  • 在所有數值特徵配對中,相關係數最高的一組為 Eye_Pain_Level(眼痛程度)與 Headache_Frequency_Per_Week(每週頭痛頻率),達到r = 0.139(圖表標示0.14)。
  • 臨床與生理意涵:眼部睫狀肌長期痙攣與眼壓上升,常伴隨引發眼眶周圍神經性頭痛,這微弱但相對最高的正相關,反映出生理症狀之間的潛在共伴關聯。
    3.調節變數的線性微弱性與多重共線性檢驗
  • 生活因子:每小時休息次數與睡眠時數對乾澀、眼痛的相關係數均落在-0.07到0.09之間,顯示單純看線性相關無法直接抓出休息的保護效果。
  • 特徵獨立性:自變數之間最大的相關係數僅為休息次數與睡眠時數的-0.068(圖表標示-0.07)。矩陣中完全不存在多重共線性問題(無任何r > 0.8的冗餘特徵),各變數獨立性極佳。

這組熱力圖證明了一件事:「眼部不適與疲勞風險並非單一數值的線性相加,而是受到類別行為(如是否抗藍光、身分差異)或非線性閥值的綜合調節」!


上一篇
邁向雙變數探索!螢幕時長與眼部症狀的散佈圖與趨勢擬合
下一篇
護眼習慣大對決!抗藍光濾鏡真的能減緩眼睛乾澀與眼痛嗎?
系列文
用數據守護雙眼:生活型態對視力影響的探索性資料分析 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言